package models;

import java.io.File;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;

import models.dados.ChaveRepetidaException;
import models.dados.DadoNaoEncontradoException;

import play.db.Model;

public interface InterfaceAdministracao {
	
	boolean loginAdministrador(String nomeUsuario, String Senha)
			throws  UsuarioBloqueadoException, DadoNaoEncontradoException, SQLException;

	void logout();


	void cadastrarAdministrador(String nomeUsuario, String senha,
			TipoUsuario tipoUsuario,String cadastradoPor) throws DadoNaoEncontradoException, AcessoNegadoException, ChaveRepetidaException, SQLException;


	List<Administrador> listarAdministradores(String usuarioAlt,String usuario,TipoUsuario tipo,String cadastradoPor,GregorianCalendar dataCadastro,boolean bloqueado,boolean naoBloqueado,boolean ativo,boolean inativo);

	void removerAdministrador(String nomeUsuario,String usuarioAlteradoPor) throws DadoNaoEncontradoException, SQLException;
	
	void ativarAdministrador(String usuario,boolean ativar,String ativadoPor) throws DadoNaoEncontradoException, SQLException;

	void alterarAdministrador(Administrador administrador,String usuarioUltimaAlteracao);

	List<Cliente> listarClientes(String nomeUsuario,String nome,Calendar dataCadastro,Calendar dataCadastroInicial,Calendar dataCadastroFinal,boolean bloqueado,boolean naoBloqueado,boolean ehCadastrado,boolean naoCadastrado,String usuarioAlteracao) throws DadoNaoEncontradoException, SQLException;

	List<Pedido> listarPedidos(long numero,String usuarioCliente,String nome,GregorianCalendar DataExata,GregorianCalendar dataInicial,
			GregorianCalendar dataFinal,String status,String usuarioUltimaAlteracao,GregorianCalendar dataUltimaAteracao,String usuarioAlteracao);

    Pedido getPedido(long numero,String usuarioAdministrador)throws DadoNaoEncontradoException;
    Produto getProduto(String tipo,String marca,String nome);
    
    void alterarStatusPedido(long numero,String novoStatus,String usuarioUltimaAltercao) throws DadoNaoEncontradoException, AcessoNegadoException;
    
	void removerPedido(long numero,String usuarioUltimaAlteracao) throws DadoNaoEncontradoException;

	void cadastrarDonut(String nomeProduto, String sabor, double preco, String arquivoImagem,Date dataCadastro, String cadastradoPor) throws ChaveRepetidaException, AcessoNegadoException, SQLException;
	void alterarProduto(String nome,String novoNome,double preco,File imagem,String usuarioAlteracao) throws DadoNaoEncontradoException;
	List<Produto> listarProdutos(String produto) throws SQLException;

	void ativarCliente(String nomeUsuario, boolean ativo,String ativadoPor);

	void removerCliente(String nomeUsuario,String removidoPor) throws DadoNaoEncontradoException, SQLException;
	
	Usuario pesquisarUsuario(String nomeUsuario) throws DadoNaoEncontradoException, SQLException;

	Cliente pesquisarCliente(String nomeUsuario) throws DadoNaoEncontradoException;

	Administrador pesquisarAdministrador(String usuario) throws DadoNaoEncontradoException, SQLException;
	
	void removerProduto(String tipo, String marca ,String nome,String removidoPor) throws DadoNaoEncontradoException;

}
